package com.nowcoder.community.controller;

import com.nowcoder.community.entity.DiscussPost;
import com.nowcoder.community.entity.Page;
import com.nowcoder.community.entity.User;
import com.nowcoder.community.service.DiscussPostService;
import com.nowcoder.community.service.LikeService;
import com.nowcoder.community.service.UserService;
import com.nowcoder.community.util.CommunityConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>Title: HomeController</p>
 * <p>author 12427</p>
 *
 * @version ver1.0
 * @date 2022/7/3 9:21
 */
@Controller
public class HomeController implements CommunityConstant {

    @Autowired
    private DiscussPostService discussPostService ;

    @Autowired
    private UserService userService ;

    @Autowired
    private LikeService likeService ;

    @RequestMapping(path = "/" , method = RequestMethod.GET)
    public String getRootPage() {
        return "forward:/index";
    }

    @RequestMapping(path = "/index" , method = RequestMethod.GET)
    public String getIndexPage(Model model  , Page page , @RequestParam(name = "orderMode" , defaultValue = "0") int orderMode){


        /**
         * MVC自动实例化Model和Page，并将Page注入到Model中
         * 所以，在thymeleaf可以直接访问Page对象的数据
         */


        // page 里面有 rows 、path 现场设置
        page.setRows(discussPostService.findDiscussPostRows(0));  // 获取全部数据
        page.setPath("/index?orderMode=" + orderMode );



        List<DiscussPost> list = discussPostService
                .findDiscussPosts(0, page.getOffset(), page.getLimit() , orderMode) ;

        List<Map<String , Object>> discussPosts = new ArrayList<>() ;

        if(list != null) {
            for (DiscussPost post : list) {
                Map<String , Object> map = new HashMap<>() ;
                map.put("post" , post) ;
                User user = userService.findUserById(post.getUserId());
                map.put("user" , user) ;

                long likeCount = likeService.findEntityLikeCount(ENTITY_TYPE_POST , post.getId()) ;
                map.put("likeCount" , likeCount) ;


                discussPosts.add(map) ;
            }
        }

        model.addAttribute("discussPosts" , discussPosts) ;
        model.addAttribute("orderMode" , orderMode) ;

        return "index" ;
    }

    @RequestMapping(path = "/error"  , method = RequestMethod.GET)
    public String getErrorPage(){
        return "/error/500" ;
    }

    @RequestMapping(path = "/denied" , method = RequestMethod.GET)
    public String getDeniedPage(){
        return "/error/404" ;
    }



}
